#include <stdio.h>
#include <string.h>

typedef struct STUDENT {
    // 成员变量
    char name[100];
    char sex;
    int age;
    float score;
}Stu;   // <--- 此处的 分号 不可省略
// Stu 是类型 struct STUDENT 的一个别名

int main()
{
    // 声明结构类型变量
//    struct STUDENT a;   // 声明了一个叫做 a 的变量，且 a 是 struct STUDENT 的类型
//    Stu b;
    // Stu s = {"zhang3", 'F', 13, 88.88};
    
    Stu ss;
    
    ss.age = 13;
    ss.sex = 'M';
    ss.score = 90;
    // ss.name = "Li4";    数组名是常量，常量不能被赋值
    strcpy(ss.name, "Li4");

    printf("name = %s, age = %d, sex = %c, score = %.3f\n", ss.name, ss.age, ss.sex, ss.score);

    
    Stu* p = &ss;
    
    p->age = 22;
    p->sex = 'M';
    p->score = 88.88;
    strcpy(p->name, "wang5");

    printf("name = %s, age = %d, sex = %c, score = %.3f\n", ss.name, ss.age, ss.sex, ss.score);
    printf("name = %s, age = %d, sex = %c, score = %.3f\n", p->name, p->age, p->sex, p->score);


    // 拓展:
    // 强调: 更改/访问 某结构体类型变量成员变量的方式，最常规的就是上面两种方法
    (&ss)->age = 33;
    (*p).score = 100;
    p[0].sex = 'F';

    printf("name = %s, age = %d, sex = %c, score = %.3f\n", p->name, p->age, p->sex, p->score);

    return 0;
}

